import axios from 'axios'
import { toast } from '~/composables/util'
import { getToken } from '~/composables/auth'
import store  from './store'
//创建自定义实例，调用create函数传入自定义配置，来创建自定义axios实例
const servies = axios.create({
    // 接口前缀（根域名）服务器发送绝对路径
    baseURL:'/api'
})
// 添加请求拦截器
servies.interceptors.request.use(function (config) {
    //往头部自动添加token
   const token = getToken()
   if(token){
    config.headers['token'] = token;
   } 
   // 在发送请求之前做些什么
    return config;
    
  },
   function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
servies.interceptors.response.use(function (response) {
    // 对响应数据做点什么，期望服务器返回的数据类型
    return response.request.responseType == "blob" ? response.data :  response.data.data;
  }, function (error) {
    // 对响应错误做点什么
    const msg = error.response.data.msg || '请求失败'; 
    if(msg == '非法token,请先登录！'){
      //都会执行 `finally` 代码块中的操作.执行 `location.reload()` 方法，该方法用于重新加载当前页面。
      store.dispatch('logout').finally(()=>location.reload())
    }
    toast(msg,'error')
   //错误信息包装成一个被拒绝的Promise对象，传递给后续错误处理函数
    return Promise.reject(error);
  });
//返回配置完成的axios实例
export default servies;